package com.github.yeecode.mybatisdemo.reflect;

/**
 * @author : wushikai
 * <p>
 * date : 2021-01-16
 *
 * 方法引用就是lambda的一种简化写法，相当于把方法当成一个变量赋值给另一个方法，这个方法接受的参数是一个函数接口，他有3中实现：
 */
public class Java8Demo {
}
 class MethodDemo {
    // 这个方法接受一个函数式接口
    public static void HasFunctionalInterface(FunctionalInterfaceDemo fid) {
        fid.doSomething("运行在：");
    }

    // 3中实现方法
    public static void main(String[] args) {
        // 第一种实现：new一个匿名的对象
        HasFunctionalInterface(new FunctionalInterfaceDemo() {
            @Override
            public void doSomething(String str) {
                System.out.println(str + "以前的实现");
            }
        });

        // 第二种实现：使用lambda表达式
        // e 是参数，System.out.println("运行在:lambda表达式"); 是方法体
        HasFunctionalInterface(e -> { System.out.println("运行在:lambda表达式"); });

        // 第三种实现：使用方法引用
        FunctionalInterfaceImplements fif = new FunctionalInterfaceImplements();
        HasFunctionalInterface(fif::doSomething);
    }
}


// 实现了函数式接口
class FunctionalInterfaceImplements implements FunctionalInterfaceDemo {
    @Override
    public void doSomething(String str) {
        System.out.println(str + "方法的引用");
    }
}


// 一个函数式接口
@FunctionalInterface
interface FunctionalInterfaceDemo {
    void doSomething(String str);
}